package cn.yangliu.operation;

import java.io.Serializable;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Function;

import javax.servlet.http.HttpServletRequest;

import cn.yangliu.operation.entity.Operation;
import cn.yangliu.operation.entity.Operator;
import com.alibaba.fastjson.JSON;


/**
 * @author 杨柳
 * 创建时间 2017-09-07 19:47
 * 用户查找当前操作的操作者 一般为当前登录用户
 */
public interface OperationHandler {

    /**
     * 查找操作人
     *
     * @param request request
     * @return 操作人信息
     */
    Operator huntOperator(HttpServletRequest request);


    /**
     * 获取IP
     *
     * @param request request
     * @return 操作人信息
     */
    default String huntIp(HttpServletRequest request) {
        return request.getRemoteHost();
    }

    /**
     * 获取参数字符串
     * @param request request
     * @param level 操作等级
     * @param moduleName 模块
     * @param actionName 操作
     * @param args 方法参数
     * @return 参数
     */
    default String huntParameters(HttpServletRequest request,String level,String moduleName,String actionName,Object [] args) {
        return JSON.toJSONString(args);
    }

    /**
     * 自定义处理
     * @return 自定义处理
     */
    default BiConsumer<HttpServletRequest,Operation<? extends Serializable>> consume(){
        return DEFAULT_CONSUMER;
    }

    BiConsumer DEFAULT_CONSUMER = (request, operation) -> {};
}
